package Barang;

import Kasir.Kasir;
import Koneksi.Koneksi;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;

/**
 *
 * @author Astri
 */
public class BarangKontrol {

    Connection konek;
    private static BarangKontrol barangKontrol;
    private Kasir kasir;

    public BarangKontrol(Connection konek) {
        this.konek = konek;
    }

    public static BarangKontrol getKoneksiKontrol() {
        Koneksi k = new Koneksi();
        if (barangKontrol == null) {
            barangKontrol = new BarangKontrol(k.getConnection());
        }
        return barangKontrol;
    }

    public void tambahBarang(Barang barang) throws SQLException {
        PreparedStatement prepare = null;
        String kode = barang.getKodeBarang();
        String nama = barang.getNamaBarang();
        String jenis = barang.getJenisBarang();
        double hargaJual = barang.getHargaJual();
        double hargaBeli = barang.getHargaBeli();
        double stockAwal = barang.getJumlahStockAwal();

        String sql = "call tambahBarang(?,?,?,?,?,?)";
        prepare = konek.prepareStatement(sql);
        prepare.setString(1, kode);
        prepare.setString(2, nama);
        prepare.setString(3, jenis);
        prepare.setDouble(4, hargaJual);
        prepare.setDouble(5, hargaBeli);
        prepare.setDouble(6, stockAwal);
        prepare.executeUpdate();
    }

    public void hapusBarang(Barang barang) throws SQLException {
        PreparedStatement prepare = null;
        String kode = barang.getKodeBarang();
        String sql = "call hapusBarang(?)";
        prepare = konek.prepareStatement(sql);
        prepare.setString(1, kode);
        prepare.executeUpdate();
    }

    public void ubahBarang(Barang barang) throws SQLException {
        PreparedStatement prepare = null;
        String kode = barang.getKodeBarang();
        String nama = barang.getNamaBarang();
        String jenis = barang.getJenisBarang();
        double hargaJual = barang.getHargaJual();
        double hargaBeli = barang.getHargaBeli();
        double stockAwal = barang.getJumlahStockAwal();
        String sql = "call updateBarang(?,?,?,?,?,?)";
        prepare = konek.prepareStatement(sql);
        prepare.setString(1, kode);
        prepare.setString(2, nama);
        prepare.setString(3, jenis);
        prepare.setDouble(4, hargaJual);
        prepare.setDouble(5, hargaBeli);
        prepare.setDouble(6, stockAwal);
        prepare.executeUpdate();
    }


    public List<Barang> getAllBarang() throws SQLException {
        PreparedStatement prepare = null;
        ResultSet rs = null;


        String sql = "select Kode_Barang,Nama_Barang,Jenis_Barang,Harga_Jual,Harga_Beli,Jumlah_Stock_Awal from barang order by Kode_Barang";
        prepare = konek.prepareStatement(sql);
        rs = prepare.executeQuery();
        List<Barang> brg = new ArrayList<Barang>();
        while (rs.next()) {
            Barang barang = new Barang();
            String kode = rs.getString("Kode_Barang");
            String nama = rs.getString("Nama_barang");
            String jenis = rs.getString("Jenis_Barang");
            Double hargaJual = rs.getDouble("Harga_Jual");
            Double hargaBeli = rs.getDouble("Harga_Beli");
            Double jumlahStockAwal = rs.getDouble("Jumlah_Stock_Awal");

            barang.setKodeBarang(kode);
            barang.setNamaBarang(nama);
            barang.setJenisBarang(jenis);
            barang.setHargaJual(hargaJual);
            barang.setHargaBeli(hargaBeli);
            barang.setJumlahStockAwal(jumlahStockAwal);
            brg.add(barang);

        }
        konek.commit();
        return brg;

    }

    public Barang cariBarang(Barang barang) throws SQLException {
        CallableStatement cl = null;
        String sql = "call cariBarang(?,?,?,?,?,?)";
        cl = konek.prepareCall(sql);
        cl.setString(1, barang.getKodeBarang());
        cl.registerOutParameter(2, java.sql.Types.VARCHAR);
        cl.registerOutParameter(3, java.sql.Types.VARCHAR);
        cl.registerOutParameter(4, java.sql.Types.DOUBLE);
        cl.registerOutParameter(5, java.sql.Types.DOUBLE);
        cl.registerOutParameter(6, java.sql.Types.DOUBLE);
        cl.execute();

        String nama = cl.getString(2);
        String jenis = cl.getString(3);
        Double hargajual = cl.getDouble(4);
        Double hargabeli = cl.getDouble(5);
        Double jumlahstockawal = cl.getDouble(6);
        cl.execute();
        
        barang.setNamaBarang(nama);
        barang.setJenisBarang(jenis);
        barang.setHargaJual(hargajual);
        barang.setHargaBeli(hargabeli);
        barang.setJumlahStockAwal(jumlahstockawal);
        return barang;
    }
}
